【LeetCode】剑指 Offer(27)
全部标签算法沉淀——哈希算法01.两数之和02.判定是否互为字符重排03.存在重复元素04.存在重复元素II05.字母异位词分组哈希算法(HashAlgorithm)是一种将任意长度的输入(也称为消息)映射为固定长度的输出的算法。这个输出通常称为哈希值或摘要。哈希算法的主要目的是快速、高效地检索数据,因为哈希值可以用作数据的唯一标识。哈希算法的特点包括:固定输出长度:无论输入的数据大小如何,哈希算法都会生成固定长度的哈希值。快速计算:对于给定的输入,哈希算法应该迅速生成相应的哈希值。不可逆性:从哈希值不能逆向推导出原始输入的内容。即使输入的数据发生微小变化,生成的哈希值也应该是大不相同的。雪崩效应:输
差分数组差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减。一、基本概念:差分数组的定义如下:假设原始数组为arr,差分数组为diff,其中diff[i]=arr[i]-arr[i-1](0根据差分数组的定义,可以通过对差分数组进行累加操作来还原出原始数组:arr[0]=diff[0]arr[1]=diff[0]+diff[1]arr[2]=diff[0]+diff[1]+diff[2]...arr[i]=diff[0]+diff[1]+...+diff[i]差分数组的主要优势在于,通过对差分数组进行区间修改操作,可以在O(1)的时间复杂度内完成。例如,如果要将原始数组的某个区间[
目录LeetCode24.两两交换链表中的节点文章讲解:代码随想录(programmercarl.com)视频讲解:帮你把链表细节学清楚|LeetCode24.两两交换链表中的节点_哔哩哔哩_bilibili思路LeetCode19.删除链表的倒数第N个节点文章讲解:代码随想录(programmercarl.com)视频讲解:链表遍历学清楚|LeetCode19.删除链表的倒数第N个节点_哔哩哔哩_bilibili思路LeetCode02.07.链表相交文章讲解:代码随想录(programmercarl.com)思路LeetCode142.环形链表II文章讲
第381场周赛-力扣(LeetCode)最后一题3017.按距离统计房屋对数目II-力扣(LeetCode)dijkstra超时了,看了灵神的解题方法力扣(LeetCode)官网-全球极客挚爱的技术成长平台,其实是差分优化的暴力统计灵神说的“撤销操作”,就是先不加那条xy新路,统计出所有距离对数,然后再加上那条路做修改。做修改需要推一下变短的位置。灵神封装写的特别好,这道题不封装一下,有问题改起来很麻烦。目录统计原始距离对数:找规律:灵神暴力左右:差分:做修改:第一种:第二种:关于小于区间右端点(x+y)/2:(等于过不了)当x==y及x==y+1时没有缩短任何距离。不需要操作参考代码:统计原
算法沉淀——字符串01.最长公共前缀02.最长回文子串03.二进制求和04.字符串相乘01.最长公共前缀题目链接:https://leetcode.cn/problems/longest-common-prefix/编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:10strs[i]仅由小写英文字母组成思路这里我们可以两两比较,也可以同时比较,这里我使用的是同时
LeetCode28找出字符串中第一个匹配项的下标题目链接:找出字符串中第一个匹配项的下标思路本题考察到了KMP算法,重点在于求next数组。考研时只学会用模式串移动的手算方法求next数组,对于严书中的前后缀做法比较陌生,看了代码随想录的文章和视频才理解,勉强掌握。而且关于next数组有很多种,常见的是将前缀表减一”:右移一位,初始位置为-1;也可以直接将前缀表用来当作next数组,都可以实现next数组,原理上无差别,本题使用前者。关于具体next数组的讲解可见上述文章视频。代码classSolution{public://该next数组为前缀表统一减一(右移一位,初始位置为-1)void
参考labuladong的算法小抄整理link子序列问题,用一维dp数组或二维dp数组来解决。一维数组:最大子数组和,最长递增子序列。dp[i]的定义:在子数组arr[0…i]中,以arr[i]结尾的子序列的长度是dp[i]。二维数组:主要用于两个数组的情况,如编辑距离,最大公共子序列;也有用在一个数组的情况,比如最长回文子序列foriinrange(n):forjinrange(n):ifarr[i]==arr[j]:dp[i][j]=dp[i][j]+...#累计相同元素的贡献else:dp[i][j]=min(...)#替换为适当的函数或计算方法,更新dp[i][j]的值为选取最大的贡献
马尔科夫链蒙特卡洛法模拟抽样,逆转换方法就是说由系统自带的随机函数RANDOM,通过下面这个方法,可以变为对应的随机模拟函数 就是说要实现蒙特卡洛模拟,是要先有一个概率表达式,然后基于这个概率表达式,通过自带的随机RANDROM函数进行转换,最后实现这个表达式而这个转换函数就是表达式的反函数接受拒绝抽样接受拒绝抽样就是说要实现二维的随机模拟,就是要两个随机均匀分布函数,第一个是实现在-5到5的区间内,最大值为1的随机抽样,计为gx,它就是先在定义域里随机取一个值a,然后计算目标函数在a下的值,接着由在0到最大值*ga上取一个值b,如果满足条件就接受a,不然就不接受;就是第一次随机取样是水平的
目录前缀和算法介绍一维前缀和二维前缀和①牛客DP34【模板】前缀和解析代码 ②牛客DP35 【模板】二维前缀和解析代码③力扣724.寻找数组的中心下标解析代码④力扣238.除自身以外数组的乘积解析代码⑤力扣560.和为K的子数组解析代码⑥力扣974.和可被K整除的子数组解析代码⑦力扣525.连续数组解析代码⑧力扣1314.矩阵区域和解析代码本篇完。前缀和算法介绍 前缀和算法是一种用于高效计算数组前缀和的算法。前缀和是指从数组的起始位置到某一位置的所有元素的和。前缀和算法其实是一个小的动态规划,其算法一般步骤如下:一维前缀和创建一个与原始数组相同长度的前缀和数组。初始时,前缀和数组
📚博客主页:爱敲代码的小杨.✨专栏:《JavaSE语法》|《数据结构与算法》|《C生万物》❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!文章目录1.题目描述示例1示例2示例3提示2.思路3.代码1.题目描述给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2输入:head=[1,2]输出:[2,1]示例3输入:head=[]输出:[]提示链表中节点的数目范围是[0,500]-5000题目链接2.思路判断链表是否为空,如果为空直接返回头结点